package com.zs.basic.runoob

/**
 *
 * @description
 * @author madison
 * @date 2021/6/2 21:38
 *
 */

fun main() {
    var collection = 1..5
    for (item in collection) print(item)
    println()
    var ints = 2..4
    for (item: Int in ints) {
        print(item)
    }

    println()
    var array = arrayOf(1, 2, 3, "4")
    for (i in array.indices) {
        print(array[i])
    }
    println()
    for ((index, value) in array.withIndex()) {
        println("the element at $index is $value")
    }

    println("----while 使用-----")
    var x = 5
    while (x > 0) {
        println(x--)
    }
    println("----do...while 使用-----")
    var y = 5
    do {
        println(y--)
    } while (y > 0)
    println("=========")
    for (i in 1..10) {
        if (i == 3) continue  // i 为 3 时跳过当前循环，继续下一次循环
        println(i)
        if (i > 5) break   // i 为 6 时 跳出循环
    }
    println("-------------")
    loop@ for (i in 1..100) {
        // ……
    }
    loop@ for (i in 1..10) {
        for (j in 1..10) {
            println("$i----$j")
            if (j > 5) break@loop
        }
    }
    println(foo())
}

fun foo() {
    var ints = 0..5
//    ints.forEach {
//        if (it == 0) return
//        print(it)
//    }
//    println()

//    ints.forEach lit@{
//        if (it == 0) return@lit
//        print(it)
//    }
//    println()

    //现在，它只会从 lambda 表达式中返回。通常情况下使用隐式标签更方便。 该标签与接受该 lambda 的函数同名。
    ints.forEach {
        if (it == 0) return@forEach
        print(it)
    }
    println()

    //或者，我们用一个匿名函数替代 lambda 表达式。 匿名函数内部的 return 语句将从该匿名函数自身返回
    ints.forEach(fun(value: Int) {
        if (value == 0) return
        print(value)
    })
    println()
}